<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Java堆内存分代机制深度解析</title>
    <link rel="stylesheet" href="https://cdn.staticfile.org/font-awesome/6.4.0/css/all.min.css">
    <link rel="stylesheet" href="https://cdn.staticfile.org/tailwindcss/2.2.19/tailwind.min.css">
    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/mermaid@latest/dist/mermaid.min.js"></script>
    <style>
        body {
            font-family: 'Noto Sans SC', Tahoma, Arial, Roboto, "Droid Sans", "Helvetica Neue", "Droid Sans Fallback", "Heiti SC", "Hiragino Sans GB", Simsun, sans-serif;
            background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
            min-height: 100vh;
        }
        
        /* 首字下沉效果 */
        .drop-cap::first-letter {
            float: left;
            font-size: 4rem;
            line-height: 3rem;
            padding-right: 0.5rem;
            margin-top: 0.5rem;
            font-weight: 700;
            color: #4a5568;
            font-family: 'Noto Serif SC', serif;
        }
        
        /* 卡片悬停效果 */
        .card-hover {
            transition: all 0.3s ease;
            box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
        }
        
        .card-hover:hover {
            transform: translateY(-4px);
            box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
        }
        
        /* 标题装饰线 */
        .title-decoration::after {
            content: '';
            display: block;
            width: 60px;
            height: 4px;
            background: linear-gradient(90deg, #667eea 0%, #764ba2 100%);
            margin-top: 1rem;
            border-radius: 2px;
        }
        
        /* 引用样式 */
        .quote-box {
            position: relative;
            padding-left: 3rem;
        }
        
        .quote-box::before {
            content: '\f10d';
            font-family: 'Font Awesome 6 Free';
            font-weight: 900;
            position: absolute;
            left: 0;
            top: -0.5rem;
            font-size: 2rem;
            color: #e2e8f0;
        }
        
        /* 数字标记 */
        .number-badge {
            display: inline-flex;
            align-items: center;
            justify-content: center;
            width: 2rem;
            height: 2rem;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            border-radius: 50%;
            font-weight: 700;
            margin-right: 0.75rem;
        }
        
        /* 图片容器 */
        .image-container {
            position: relative;
            overflow: hidden;
            border-radius: 0.75rem;
            box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
        }
        
        .image-container img {
            transition: transform 0.3s ease;
        }
        
        .image-container:hover img {
            transform: scale(1.05);
        }
        
        /* 渐变文字 */
        .gradient-text {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            background-clip: text;
        }
        
        /* 滚动动画 */
        .fade-in {
            opacity: 0;
            transform: translateY(20px);
            animation: fadeIn 0.8s ease forwards;
        }
        
        @keyframes fadeIn {
            to {
                opacity: 1;
                transform: translateY(0);
            }
        }
        
        /* 时间线样式 */
        .timeline-item {
            position: relative;
            padding-left: 3rem;
            padding-bottom: 2rem;
        }
        
        .timeline-item::before {
            content: '';
            position: absolute;
            left: 1rem;
            top: 0.5rem;
            bottom: -2rem;
            width: 2px;
            background: #e2e8f0;
        }
        
        .timeline-item:last-child::before {
            display: none;
        }
        
        .timeline-dot {
            position: absolute;
            left: 0.5rem;
            top: 0.5rem;
            width: 1rem;
            height: 1rem;
            background: #667eea;
            border-radius: 50%;
            border: 3px solid white;
            box-shadow: 0 0 0 3px #e2e8f0;
        }
    </style>
</head>
<body>
    <!-- Hero Section -->
    <section class="relative overflow-hidden bg-gradient-to-br from-purple-600 via-indigo-600 to-blue-600 text-white">
        <div class="absolute inset-0 bg-black opacity-20"></div>
        <div class="relative container mx-auto px-6 py-24">
            <div class="max-w-4xl mx-auto text-center fade-in">
                <h1 class="text-5xl md:text-6xl font-bold mb-6 leading-tight">
                    Java堆内存分代机制
                    <span class="block text-3xl md:text-4xl mt-4 font-light opacity-90">深度解析与实践指南</span>
                </h1>
                <p class="text-xl md:text-2xl opacity-90 leading-relaxed">
                    探索JVM内存管理的核心机制，理解分代理论如何优化垃圾回收性能
                </p>
                <div class="mt-8 flex justify-center space-x-4">
                    <div class="flex items-center">
                        <i class="fas fa-clock mr-2"></i>
                        <span>阅读时间：15分钟</span>
                    </div>
                    <div class="flex items-center">
                        <i class="fas fa-layer-group mr-2"></i>
                        <span>深度：高级</span>
                    </div>
                </div>
            </div>
        </div>
        <div class="absolute bottom-0 left-0 right-0">
            <svg viewBox="0 0 1440 120" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path d="M0 120L60 105C120 90 240 60 360 45C480 30 600 30 720 37.5C840 45 960 60 1080 67.5C1200 75 1320 75 1380 75L1440 75V120H1380C1320 120 1200 120 1080 120C960 120 840 120 720 120C600 120 480 120 360 120C240 120 120 120 60 120H0Z" fill="white"/>
            </svg>
        </div>
    </section>

    <!-- Main Content -->
    <main class="container mx-auto px-6 py-12 max-w-6xl">
        
        <!-- 引言卡片 -->
        <div class="bg-white rounded-2xl shadow-xl p-8 mb-12 card-hover fade-in">
            <div class="flex items-start">
                <div class="flex-shrink-0 mr-4">
                    <div class="w-16 h-16 bg-gradient-to-br from-purple-500 to-indigo-600 rounded-full flex items-center justify-center">
                        <i class="fas fa-lightbulb text-white text-2xl"></i>
                    </div>
                </div>
                <div class="flex-1">
                    <h2 class="text-2xl font-bold text-gray-800 mb-4">核心概念</h2>
                    <p class="text-gray-600 leading-relaxed drop-cap">
                        Java的堆内存是Java虚拟机管理的内存中最大的一块，用于存放对象实例。为了更高效地管理内存和提高垃圾回收的性能，Java堆内存通常被划分为不同的代，每个代具有不同的特点和用途。这种分代的设计是基于分代理论，认为对象的生命周期可以划分为不同的阶段，根据对象的存活时间将堆内存分为不同的区域，从而采用不同的垃圾回收算法和策略来管理内存。
                    </p>
                </div>
            </div>
        </div>

        <!-- 分代架构图 -->
        <div class="bg-white rounded-2xl shadow-xl p-8 mb-12 fade-in">
            <h2 class="text-3xl font-bold text-gray-800 mb-6 title-decoration">堆内存分代架构</h2>
            <div class="mermaid text-center">
                graph TB
                    A[Java堆内存] --> B[新生代 Young Generation]
                    A --> C[老年代 Old Generation]
                    A --> D[元空间 Metaspace]
                    
                    B --> E[Eden区]
                    B --> F[Survivor From]
                    B --> G[Survivor To]
                    
                    style A fill:#667eea,stroke:#4c51bf,stroke-width:3px,color:#fff
                    style B fill:#48bb78,stroke:#38a169,stroke-width:2px,color:#fff
                    style C fill:#ed8936,stroke:#dd6b20,stroke-width:2px,color:#fff
                    style D fill:#9f7aea,stroke:#805ad5,stroke-width:2px,color:#fff
                    style E fill:#81e6d9,stroke:#4fd1c5,stroke-width:2px
                    style F fill:#81e6d9,stroke:#4fd1c5,stroke-width:2px
                    style G fill:#81e6d9,stroke:#4fd1c5,stroke-width:2px
            </div>
        </div>

        <!-- 为什么要分代 -->
        <section class="mb-16 fade-in">
            <h2 class="text-4xl font-bold text-gray-800 mb-8 flex items-center">
                <i class="fas fa-question-circle text-purple-600 mr-4"></i>
                为什么要分代
            </h2>
            
            <div class="bg-gradient-to-r from-purple-50 to-indigo-50 rounded-2xl p-8 mb-8">
                <p class="text-lg text-gray-700 leading-relaxed quote-box">
                    <strong>为什么要将堆空间分代呢？这是因为不同对象的生命周期不同，经常会有一些对象是临时性的，而另一些对象可能会长时间存活</strong>。如果将所有对象都放在同一个堆空间中，垃圾回收会变得非常复杂和低效。因此，将堆空间分为不同代可以更好地适应不同对象的生命周期，从而优化垃圾回收的性能。
                </p>
            </div>

            <div class="grid md:grid-cols-2 gap-6">
                <div class="bg-white rounded-xl shadow-lg p-6 card-hover">
                    <div class="flex items-start mb-4">
                        <span class="number-badge">1</span>
                        <h3 class="text-xl font-bold text-gray-800">对象生命周期的不同阶段</h3>
                    </div>
                    <p class="text-gray-600 leading-relaxed">
                        Java程序中的对象生命周期可以分为不同的阶段，包括新创建的对象、短时间存活的对象和长时间存活的对象等。这些对象在内存中的存储和回收方式可能有所不同。
                    </p>
                </div>

                <div class="bg-white rounded-xl shadow-lg p-6 card-hover">
                    <div class="flex items-start mb-4">
                        <span class="number-badge">2</span>
                        <h3 class="text-xl font-bold text-gray-800">垃圾回收的性能优化</h3>
                    </div>
                    <p class="text-gray-600 leading-relaxed">
                        将堆内存分为不同的代，可以针对不同代采用不同的垃圾回收算法和策略，从而提高垃圾回收的性能和效率。通常情况下，新生代采用复制算法来进行垃圾回收，而老年代采用标记-清除或标记-整理算法。
                    </p>
                </div>

                <div class="bg-white rounded-xl shadow-lg p-6 card-hover">
                    <div class="flex items-start mb-4">
                        <span class="number-badge">3</span>
                        <h3 class="text-xl font-bold text-gray-800">内存分配的优化</h3>
                    </div>
                    <p class="text-gray-600 leading-relaxed">
                        将堆内存分为不同的代，还可以针对不同代采用不同的内存分配策略。例如，在新生代中，通常采用的是分配指针碰撞或者空闲列表等方式进行内存分配，而在老年代中，通常采用的是分代的分配器来进行内存分配。
                    </p>
                </div>

                <div class="bg-white rounded-xl shadow-lg p-6 card-hover">
                    <div class="flex items-start mb-4">
                        <span class="number-badge">4</span>
                        <h3 class="text-xl font-bold text